package cn.edu.gzhmt.user.service.impl;

import cn.edu.gzhmt.user.dao.IUserDao;
import cn.edu.gzhmt.user.dao.impl.UserDaoImpl;
import cn.edu.gzhmt.user.domain.User;
import cn.edu.gzhmt.user.service.IUserService;
import cn.edu.gzhmt.user.service.UserException;

/**
 * User业务层实现类
 * @author azhuo
 *
 */
public class UserServiceImpl implements IUserService {
	
	private IUserDao userDao = new UserDaoImpl();

	/**
	 * 用户注册
	 * 用户名 和 邮箱 不允许重复
	 * @throws UserException 
	 */
	public void regist(User form) throws UserException{
		// 用户名是否存在
		User user = userDao.findUserByUsername(form.getUsername());
		if(user != null){
			throw new UserException("用户名已经存在");
		}
		
		// 验证邮箱是否已经被注册
		user = userDao.findUserByEmail(form.getEmail());
		if(user != null){
			throw new UserException("邮箱已经被注册过了");
		}

		// 添加用户
		userDao.addUser(form);
	}

	/**
	 * 用户激活
	 */
	public void active(String stateCode) throws UserException {
		// 根据激活码查询用户
		User user = userDao.findUserByStateCode(stateCode);
		// 用户不存在，说明激活码无效
		if(user == null){
			throw new UserException("无效的激活码，不要搞事情！");
		}
		
		// 判断用户是否是二次激活
		if(user.getIsstate()){
			throw new UserException("用户已经激活，无需二次激活。");
		}
		
		userDao.updateState(user.getUid(), true);
	}

	/**
	 * 进行用户登录
	 */
	public User login(User form) throws UserException {
		// 查询用户是否存在
		User user = userDao.findUserByUsername(form.getUsername());
		
		if(user == null){
			throw new UserException("用户不存在，请在注册后登录！");
		}
		
		// 判断用户是否已经激活
		if(!user.getIsstate()){
			throw new UserException("用户尚未激活，请在点击注册邮箱激活连接后登录！");
		}
		
		// 判断密码是否正确
		if(!user.getPassword().equals(form.getPassword())){
			throw new UserException("密码错误，请重新输入密码。");
		}
		
		return user;
	}

	/**
	 * 根据用户id，字段名称，字段值来更新用户信息
	 */
	public User editData(String uid, String columnName, String columnValue) throws UserException {
		
		User user = null;
		
		// 用户名更新，查看用户名是否存在
		if("username".equals(columnName)){
			user = userDao.findUserByUsername(columnValue);
			if(user != null){
				throw new UserException("用户名已经存在，换一下。");
			}
		}
		
		// 邮箱更新，查看邮箱是否已经被注册
		if("".equals(columnName)){
			user = userDao.findUserByEmail(columnValue);
			if(user != null){
				throw new UserException("邮箱已经被注册过了");
			}
		}
		
		// 进行更新
		userDao.update(uid, columnName, columnValue);
		
		user = userDao.findUserById(uid);
		
		// 查询更新后的用户并返回
		return user;
	}


}
